﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Biblioteca.Utils;
using SERIX.Util;
using System.Collections.Generic;
using System.Web.SessionState;

namespace SERIX.Controles
{

    public partial class Navegador : System.Web.UI.UserControl
    {
        CriteriosPesquisa criteriosPesquisa;

        string sessionId;

        public string SessionId
        {
            get
            {
                if (string.IsNullOrEmpty(sessionId))
                    sessionId = "PagAtual";
                return sessionId;
            }
            set { sessionId = value; }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            InicializarCriteriosPesquisa();
        }

        public void ResetPagina()
        {
            criteriosPesquisa.PaginaAtual = 1;
            Session[sessionId] = 1;
        }

        private void InicializarCriteriosPesquisa()
        {
            string id = null;
            if (SessionId.ToLower() != "pagatual")
            {
                // estou na lov
                id = "Lov_" + sessionId;
            }
            else
            {
                // estou na página de listagem
                id = Page.ToString();
            }
            criteriosPesquisa = (CriteriosPesquisa)Session[id];

            if (criteriosPesquisa == null)
            {
                criteriosPesquisa = new CriteriosPesquisa() { FiltroSimples = "", PaginaAtual = 1 };
                Session[id] = criteriosPesquisa;
            }
            Session[SessionId] = criteriosPesquisa.PaginaAtual;
        }

        public delegate void PesquisarDelegate();
        public event PesquisarDelegate Pesquisar;

        /// <summary>
        /// Carrega as informações referentes a paginação na tela
        /// </summary>
        /// <param name="lblPagina">Label da página atual</param>
        /// <param name="lblTotalPag">label do total de páginas</param>
        /// <param name="session">Sessão</param>
        /// <param name="tamPag">Tamanho das páginas</param>
        /// <param name="qtdLinhas">Quantidade de Linhas</param>
        public void CarregueTela(Label lblPagina, Label lblTotalPag, HttpSessionState session, int tamPag, int qtdLinhas)
        {
            lblPagina.Text = session[SessionId].ToString();
            int totalPag = (qtdLinhas / tamPag) + 1;
            if ((qtdLinhas % tamPag) == 0)
            {
                totalPag = totalPag - 1;
            }
            session.Add("totalPag", totalPag);
            lblTotalPag.Text = totalPag.ToString();
            if (totalPag == 0)
            {
                lblPagina.Text = "0";
            }
        }

        /// <summary>
        /// Carrega os botoes da interface referentes a paginação na tela
        /// </summary>
        /// <param name="btnPrimeiro">Botão "Primeiro"</param>
        /// <param name="btnAnterior">Botão "Anterior"</param>
        /// <param name="btnProximo">Botão "Próximo"</param>
        /// <param name="btnUltimo">Botão "Último"</param>
        /// <param name="pagAtual">Página atual</param>
        /// <param name="totalPag">Total de Páginas</param>
        public void ValideBotoes(Button btnPrimeiro, Button btnAnterior, Button btnProximo, Button btnUltimo, int pagAtual, int totalPag)
        {
            if (pagAtual == 1)
            {
                btnAnterior.Enabled = false;
                btnPrimeiro.Enabled = false;
                if (totalPag > 1)
                {
                    btnProximo.Enabled = true;
                    btnUltimo.Enabled = true;
                }
                else
                {
                    btnProximo.Enabled = false;
                    btnUltimo.Enabled = false;
                }
            }
            else
            {
                btnAnterior.Enabled = true;
                btnPrimeiro.Enabled = true;

                if (pagAtual == totalPag)
                {
                    btnProximo.Enabled = false;
                    btnUltimo.Enabled = false;
                }
                else
                {
                    btnProximo.Enabled = true;
                    btnUltimo.Enabled = true;
                }
            }
        }

        public void CarregueBotoes(int qtdLinhas)
        {
            InicializarCriteriosPesquisa();
            Biblio.CarregueTela(lblPagina, lblTotalPag, Session, BiblioSERIX.tamPag, qtdLinhas);
            Biblio.ValideBotoes(btnPrimeiro, btnAnterior, btnProximo, btnUltimo, criteriosPesquisa.PaginaAtual, int.Parse(lblTotalPag.Text));
            
            if (qtdLinhas > 0)
                lblPagina.Text = criteriosPesquisa.PaginaAtual.ToString();
            else
                lblPagina.Text = "0";
        }

        protected void btnPrimeiro_Click(object sender, EventArgs e)
        {
            criteriosPesquisa.PaginaAtual = 1;
            Session.Add(SessionId, 1);
            Pesquisar();
        }

        protected void btnAnterior_Click(object sender, EventArgs e)
        {
            criteriosPesquisa.PaginaAtual--;
            Session[SessionId] = (int)Session[SessionId] - 1;
            Pesquisar();
        }

        protected void btnProximo_Click(object sender, EventArgs e)
        {
            criteriosPesquisa.PaginaAtual++;
            Session[SessionId] = (int)Session[SessionId] + 1;
            Pesquisar();
        }

        protected void btnUltimo_Click(object sender, EventArgs e)
        {
            criteriosPesquisa.PaginaAtual = Convert.ToInt32(Session["totalPag"]);
            Session[SessionId] = Session["totalPag"];
            Pesquisar();
        }

        protected void ddlAplicacoes_SelectedIndexChanged(object sender, EventArgs e)
        {
            criteriosPesquisa.PaginaAtual = 1;
            Session.Add(SessionId, 1);
            Pesquisar();
        }
    }

    /*
     * v3 Lloyd
    public partial class Navegador : System.Web.UI.UserControl
    {
        string sessionId;

        public string SessionId
        {
            get
            {
                if (!string.IsNullOrEmpty(sessionId))
                    return sessionId;
                return "pagAtual";
            }
            set { sessionId = value; }
        }

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        public delegate void PesquisarDelegate();
        public event PesquisarDelegate Pesquisar;

        /// <summary>
        /// Carrega as informações referentes a paginação na tela
        /// </summary>
        /// <param name="lblPagina">Label da página atual</param>
        /// <param name="lblTotalPag">label do total de páginas</param>
        /// <param name="session">Sessão</param>
        /// <param name="tamPag">Tamanho das páginas</param>
        /// <param name="qtdLinhas">Quantidade de Linhas</param>
        public void CarregueTela(Label lblPagina, Label lblTotalPag, HttpSessionState session, int tamPag, int qtdLinhas)
        {
            lblPagina.Text = session[SessionId].ToString();
            int totalPag = (qtdLinhas / tamPag) + 1;
            if ((qtdLinhas % tamPag) == 0)
            {
                totalPag = totalPag - 1;
            }
            session.Add("totalPag", totalPag);
            lblTotalPag.Text = totalPag.ToString();
            if (totalPag == 0)
            {
                lblPagina.Text = "0";
            }
        }

        /// <summary>
        /// Carrega os botoes da interface referentes a paginação na tela
        /// </summary>
        /// <param name="btnPrimeiro">Botão "Primeiro"</param>
        /// <param name="btnAnterior">Botão "Anterior"</param>
        /// <param name="btnProximo">Botão "Próximo"</param>
        /// <param name="btnUltimo">Botão "Último"</param>
        /// <param name="pagAtual">Página atual</param>
        /// <param name="totalPag">Total de Páginas</param>
        public void ValideBotoes(Button btnPrimeiro, Button btnAnterior, Button btnProximo, Button btnUltimo, int pagAtual, int totalPag)
        {
            if (pagAtual == 1)
            {
                btnAnterior.Enabled = false;
                btnPrimeiro.Enabled = false;
                if (totalPag > 1)
                {
                    btnProximo.Enabled = true;
                    btnUltimo.Enabled = true;
                }
                else
                {
                    btnProximo.Enabled = false;
                    btnUltimo.Enabled = false;
                }
            }
            else
            {
                btnAnterior.Enabled = true;
                btnPrimeiro.Enabled = true;

                if (pagAtual == totalPag)
                {
                    btnProximo.Enabled = false;
                    btnUltimo.Enabled = false;
                }
                else
                {
                    btnProximo.Enabled = true;
                    btnUltimo.Enabled = true;
                }
            }
        }

        public void CarregueBotoes(int qtdLinhas)
        {
            CarregueTela(lblPagina, lblTotalPag, Session, BiblioSERIX.tamPag, qtdLinhas);
            ValideBotoes(btnPrimeiro, btnAnterior, btnProximo, btnUltimo, Convert.ToInt32(Session[SessionId]), int.Parse(lblTotalPag.Text));
        }

        protected void btnPrimeiro_Click(object sender, EventArgs e)
        {
            Session.Add(SessionId, 1);
            Pesquisar();
        }

        protected void btnAnterior_Click(object sender, EventArgs e)
        {
            Session[SessionId] = Convert.ToInt32(Session[SessionId]) - 1;
            Pesquisar();
        }

        protected void btnProximo_Click(object sender, EventArgs e)
        {
            Session[SessionId] = Convert.ToInt32(Session[SessionId]) + 1;
            Pesquisar();
        }

        protected void btnUltimo_Click(object sender, EventArgs e)
        {
            Session[SessionId] = Session["totalPag"];
            Pesquisar();
        }

        protected void ddlAplicacoes_SelectedIndexChanged(object sender, EventArgs e)
        {
            Session.Add(SessionId, 1);
            Pesquisar();
        }
    }
    */
}
